package com.shujia.day11;

import java.util.ArrayList;
import java.util.ListIterator;

public class Code02List {
    public static void main(String[] args) {

        /*
            listIterator是Iterator接口的子接口，专门为ArrayList数据提供迭代器
                因为ArrayList中数据是有序的，所以可以提供 前移和后移两种方向获取数据


            ConcurrentModificationException
                原因：当迭代器在遍历数据时，对原先的ArrayList集合数据进行修改，那么修改后，迭代器中的顺序没有变更，所以导致信息不同步
                解决方案： 使用迭代器中的方式添加数
         */


        ArrayList stuArr = new ArrayList();

        stuArr.add(new Student("小许",16));
        stuArr.add(new Student("小云",17));
        stuArr.add(new Student("小龙",18));


        ListIterator listIterator = stuArr.listIterator();

        while (listIterator.hasNext()){
            System.out.println(listIterator.next());
        }

        // 注意：对于ListIterator来说，当列表中的数据已经被遍历完之后，再去通过指针获取数据，无法获取
//        ListIterator listIterator2 = stuArr.listIterator();
//        while (listIterator2.hasNext()){
//            System.out.println(listIterator.next());
//        }


        System.out.println("===========");
        while (listIterator.hasPrevious()) {
            System.out.println(listIterator.previous());
        }

        System.out.println("===========");
        while (listIterator.hasNext()){
//            System.out.println(listIterator.next());
            Student next = (Student)listIterator.next();
            if (next.equals(new Student("小许",16))){
//                stuArr.add(1,new Student("小仙",18));
                // 使用迭代器中的方式添加
                listIterator.add(new Student("小仙",18));
            }
            System.out.println(next);
        }

        while (listIterator.hasPrevious()) {
            System.out.println(listIterator.previous());
        }



    }
}
